// Copyright (C) 2024 wlly-lzh
// Created by wlly-lzh on 24-4-10
// Doubly Linked List 双链表
#ifndef _DLLIST_H
#define _DLLIST_H

#include <stdbool.h>
typedef struct LDLList LDLList;
struct LDLList { };

LDLList * Create_LDLList();
// 创建
void Clear_LDLList(LDLList *List,void (*FreeData)(void *));
// 清空
// void FreeData(void *); 
// 用来释放存入表中的的数据，避免内存未正确释放
// 下面的几个函数的FreeData形参的功能也是一样的
void Destroy_LDLList(LDLList **List,void (*FreeData)(void *));
// 销毁
bool GetItem_LDLList(LDLList *List,unsigned int addr,void **Data);
// 获取指定位置上的数据
bool Delete_LDLList(LDLList *List,unsigned int addr,
		void (*FreeData)(void *));
// 删除指定位置的数据
bool Update_LDLList(LDLList *List,unsigned int addr,
		void *Data,void (*FreeData)(void *));
// 更新指定位置的数据
bool Insert_LDLList(LDLList *List,unsigned int addr,void *Data);
// 插入
void AddHead_LDLList(LDLList *List,void *Data);
// 在头节点插入
void AddTail_LDLList(LDLList *List,void *Data);
// 在尾节点插入
unsigned int Length_LDLList(const LDLList *List);
#endif // _DLLIST_H 
